<?php

namespace app\common\util\builder;
use app\common\model\Spot;
use app\common\model\Product;
use app\common\util\WhereBuilder;

/**
 * 产品where构建器
 */
class ProductWhereBuilder extends WhereBuilder
{
    /**
     * 使用用户端限制条件
     * - 不开启销售不显示 `is_sale=true`
     * - 未过审不显示 `is_pass=Product::PASS_STATUS_PASS=1`
     * - 所属景区无效不显示 `spot.valid=true`
     * - 所属景区未过审不显示 `spot.pass_status=Spot::PASS_STATUS_PASS=1`
     * - 不在销售规则中的销售期内 `rule.sell_begin_date<=$now<=rule.sell_end_date`
     *
     * @return static
     */
    public function useMemberRestriction($p = 'p', $s = 's', $r = 'r', $when = true)
    {
        if (!$when) {
            return $this;
        }
        $now = getNow();
        $SP_TYPE = Product::TYPE_SPECIALTY;
        return $this->eq("$p.is_sale", true) // 不开启销售不显示
            ->eq("$p.is_pass", Product::PASS_STATUS_PASS) // 未过审不显示
            ->eq("$s.valid", true) // 所属景区无效不显示
            ->eq("$s.pass_status", Spot::PASS_STATUS_PASS) // 所属景区未过审不显示
            // 不在销售规则中的销售期内
            ->whereRaw("`$p`.`type` = $SP_TYPE OR `$r`.`sell_begin_date` <= '$now'")
            ->whereRaw("`$p`.`type` = $SP_TYPE OR `$r`.`sell_end_date` >= '$now'");
    }
}